/*
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations
 * under the License.
 * 
 * The Original Code is iSQL-Viewer, A Mutli-Platform Database Tool.
 *
 * The Initial Developer of the Original Code is iSQL-Viewer, A Mutli-Platform Database Tool.
 * Portions created by Mark A. Kobold are Copyright (C) 2000-2007. All Rights Reserved.
 *
 * Contributor(s): 
 *  Mark A. Kobold [mkobold <at> isqlviewer <dot> com].
 *  
 * If you didn't download this code from the following link, you should check
 * if you aren't using an obsolete version: http://www.isqlviewer.com
 */
package org.isqlviewer.swing.table;

/**
 * An interface to indacte that it's contents are sortable.
 * <p>
 * This interface is mainly designed for use with TableModel implementations.
 * 
 * @author Mark A. Kobold &lt;mkobold at isqlviewer dot com&gt;
 * @version 1.0
 */
public interface Sortable {

    /**
     * Sorts the given column with a given direction.
     * <p>
     * Implementation should handle if the column index is out of bounds.
     * 
     * @param column the desired column to sort.
     * @param sortAscending the sorting direction flag.
     */
    public void sort(int column, boolean sortAscending);

    /**
     * Reverse indexing of column names.
     * <p>
     * This method helps the sort icon show in the Table headers appear on the correct column even if it is reodered.
     * 
     * @param ColumnName to reverse lookup
     * @return int the true index of the column in the data model.
     */
    public int getIndexOfColumnName(String ColumnName);

    /**
     * Checks to see if a given column can be sorted in a given direction.
     * <p>
     * Calls should be made to this method prior to calling sort(int, boolean). Invocation to the sort(int, boolean)
     * method should only occur if this method returns true.
     * 
     * @see #sort(int, boolean)
     * @param column to check for sorting.
     * @param ascending true for ascending, false for descending.
     * @return if the given column is sortable.
     */
    public boolean canSort(int column, boolean ascending);

}